home *** CD-ROM | disk | FTP | other *** search
/ USA Bestseller / USA BESTSELLER Vol 1-95 (Hepp-Computer)(1995).iso / e241 / wincake.ms_ / wincake.bin
Text File  |  1992-05-14  |  14KB  |  442 lines

  1. '**************************************************************************
  2. '* $Header:   G:/SRC/WCW/MSSETUP/VCS/WINCAKE.MSV   1.6   13 May 1992 22:22:10   pws  $
  3. '*
  4. '* DESCRIPTION: MS-Setup script for Wincake and Wcwdemo.
  5. '*
  6. '* $Log:   G:/SRC/WCW/MSSETUP/VCS/WINCAKE.MSV  $
  7. '* 
  8. '*    Rev 1.6   13 May 1992 22:22:10   pws
  9. '* .INF filename is now always SETUP.INF.
  10. '* 
  11. '*    Rev 1.5   08 May 1992 18:28:28   gwh
  12. '* Use EXITSUCCESS_DEMO if installing Demo.
  13. '* 
  14. '*    Rev 1.4   08 May 1992 18:00:20   pws
  15. '* Support WCWDEMO.
  16. '* 
  17. '*    Rev 1.3   03 May 1992 18:51:18   pws
  18. '* Associate filetypes in Registration Database, too.
  19. '* 
  20. '*    Rev 1.2   21 Apr 1992 00:37:36   pws
  21. '* Added filetype associations for .WRK, .MID, & .MFF to WIN.INI,
  22. '* obtaining user confirmation when desirable.
  23. '* Reject installation if Windows Version < 3.1.
  24. '* Sense and handle when insufficient disk space on any paths.
  25. '* 
  26. '*    Rev 1.1   17 Apr 1992 19:16:38   gwh
  27. '* Revised some names, including ProgMan group now "Cakewalk Professional".
  28. '* 
  29. '*    Rev 1.0   17 Apr 1992 17:14:56   pws
  30. '* Initial revision.
  31. '*
  32. '* Copyright (C) 1990- by Greg Hendershott.  All rights reserved.
  33. '**************************************************************************
  34.  
  35. '$INCLUDE 'setupapi.inc'
  36. '$INCLUDE 'msdetect.inc'
  37. '$INCLUDE 'msregdb.inc'
  38.  
  39. ''These should have all been in SETUPAPI.INC.
  40. ''Note that duplicate definitions are errors and so are commented out!
  41.  
  42. 'CONST MB_OK               = &H0000
  43. CONST MB_OKCANCEL         = &H0001
  44. CONST MB_ABORTRETRYIGNORE = &H0002
  45. CONST MB_YESNOCANCEL      = &H0003
  46. CONST MB_YESNO            = &H0004
  47. CONST MB_RETRYCANCEL      = &H0005
  48. CONST MB_TYPEMASK         = &H000F
  49.  
  50. 'CONST MB_ICONHAND         = &H0010
  51. CONST MB_ICONQUESTION     = &H0020
  52. CONST MB_ICONEXCLAMATION  = &H0030
  53. CONST MB_ICONASTERISK     = &H0040
  54. CONST MB_ICONMASK         = &H00F0
  55.  
  56. CONST MB_ICONINFORMATION  = MB_ICONASTERISK
  57. CONST MB_ICONSTOP         = MB_ICONHAND
  58.  
  59. CONST MB_DEFBUTTON1       = &H0000
  60. CONST MB_DEFBUTTON2       = &H0100
  61. CONST MB_DEFBUTTON3       = &H0200
  62. CONST MB_DEFMASK          = &H0F00
  63.  
  64. CONST MB_APPLMODAL        = &H0000
  65. CONST MB_SYSTEMMODAL      = &H1000
  66. 'CONST MB_TASKMODAL        = &H2000
  67.  
  68. CONST MB_NOFOCUS          = &H8000
  69.  
  70. CONST IDOK                = 1
  71. CONST IDCANCEL            = 2
  72. CONST IDABORT             = 3
  73. CONST IDRETRY             = 4
  74. CONST IDIGNORE            = 5
  75. CONST IDYES               = 6
  76. CONST IDNO                = 7
  77.  
  78. ''Dialog ID's
  79. CONST WELCOME                 = 100
  80. CONST ASKQUIT                 = 200
  81. CONST DESTPATH                = 300
  82. CONST EXITFAILURE             = 400
  83. CONST EXITQUIT                = 600
  84. CONST EXITSUCCESS             = 700
  85. CONST APPHELP                 = 900
  86. CONST INI_NOT_OVERWRITTEN     = 1000
  87. CONST PATCHES_NOT_OVERWRITTEN = 1100
  88. CONST EXITSUCCESS_DEMO        = 1200
  89. CONST BADPATH                 = 6400
  90.  
  91. ''Bitmap ID
  92. CONST LOGO = 1
  93.  
  94. GLOBAL COMPANY$
  95. GLOBAL PROGNAME$
  96. GLOBAL PRODUCTNAME$
  97. GLOBAL DEST$        ''Default destination directory.
  98.  
  99. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  100. DECLARE SUB MaybeAssociate (szExt$)
  101.  
  102.  
  103. INIT:
  104.     CUIDLL$ = "mscuistf.dll"            ''Custom user interface dll
  105.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  106.     COMPANY$ = "Twelve Tone Systems"
  107.     PROGMANGROUPNAME$ = "Cakewalk Professional"
  108.     INFBASENAME$ = "SETUP"
  109.     IF DoesFileExist(GetSymbolValue("STF_SRCDIR") + "WINCAKE.EX_", femExists) <> 0 THEN
  110.         PROGNAME$ = "WINCAKE"
  111.     ELSEIF DoesFileExist(GetSymbolValue("STF_SRCDIR") + "WCWDEMO.EX_", femExists) <> 0 THEN
  112.         PROGNAME$ = "WCWDEMO"
  113.     ELSE
  114.         GOTO ERRQUIT
  115.     END IF
  116.     IF PROGNAME$ = "WINCAKE" THEN
  117.         PRODUCTNAME$ = "Cakewalk Professional"
  118.     ELSEIF PROGNAME$ = "WCWDEMO" THEN
  119.         PRODUCTNAME$ = "Cakewalk Professional Demo"
  120.     END IF
  121.     DEST$ = "C:\WINCAKE"
  122.     winVerReqd$ = "3.1"
  123.  
  124.     SetBitmap CUIDLL$, LOGO
  125.     SetTitle PRODUCTNAME$ + " Setup"
  126.  
  127.     winVer$ = LTRIM$(STR$(GetWindowsMajorVersion())) + "." + LTRIM$(STR$(GetWindowsMinorVersion()))
  128.     IF winVer$ < winVerReqd$ THEN             ''String sort works
  129.         i% = DoMsgBox("Sorry, but your Windows version is "+winVer$+" and "+PRODUCTNAME$+" requires at least Windows "+winVerReqd$+".", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  130.         END
  131.     END IF
  132.  
  133.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  134.     IF szInf$ = "" THEN
  135.         szInf$ = GetSymbolValue("STF_CWDDIR") + INFBASENAME$+".INF"
  136.     END IF
  137.     ReadInfFile szInf$
  138.  
  139.     ''Disk cost list symbols
  140.     FILECOSTS$   = "FileCosts"
  141.     EXTRACOSTS$  = "ExtraCosts"
  142.     STILLNEEDED$ = "StillNeeded"
  143.     FOR i% = 1 TO 26 STEP 1
  144.         AddListItem EXTRACOSTS$, "0"
  145.     NEXT i%
  146.     ''Add extra cost to Windows drive for ini/progman, etc.
  147.     ixWinDrive% = ASC(UCASE$( MID$(GetWindowsDir(), 1, 1) )) - ASC("A") + 1
  148.     ReplaceListItem EXTRACOSTS$, ixWinDrive%, "10240"
  149.  
  150.  
  151. WELCOME:
  152.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  153.     IF sz$ = "CONTINUE" THEN
  154.         UIPop 1
  155.     ELSE
  156.         GOSUB ASKQUIT
  157.         GOTO WELCOME
  158.     END IF
  159.  
  160.  
  161. GETPATH:
  162.     SetSymbolValue "EditTextIn", DEST$
  163.     SetSymbolValue "EditFocus", "END"
  164. GETPATHL1:
  165.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  166.     DEST$ = GetSymbolValue("EditTextOut")
  167.  
  168.     IF sz$ = "CONTINUE" THEN
  169.         IF IsDirWritable(DEST$) = 0 THEN
  170.             GOSUB BADPATH
  171.             GOTO GETPATHL1
  172.         END IF
  173.         UIPop 1
  174.         ixAppDrive% = ASC(UCASE$( MID$(DEST$, 1, 1) )) - ASC("A") + 1
  175.     ELSEIF sz$ = "REACTIVATE" THEN
  176.         GOTO GETPATHL1
  177.     ELSEIF sz$ = "BACK" THEN
  178.         UIPop 1
  179.         GOTO WELCOME
  180.     ELSE
  181.         GOSUB ASKQUIT
  182.         GOTO GETPATH
  183.     END IF
  184.  
  185.  
  186.     GOSUB INSTALL
  187.     IF StillNeed& > 0 THEN
  188.         GOTO GETPATH
  189.     END IF
  190.  
  191.  
  192. QUIT:
  193.     ON ERROR GOTO ERRQUIT
  194.  
  195.     IF ERR = 0 THEN
  196.         IF PROGNAME$ = "WINCAKE" THEN
  197.             dlg% = EXITSUCCESS
  198.         ELSEIF PROGNAME$ = "WCWDEMO" THEN
  199.             dlg% = EXITSUCCESS_DEMO
  200.         END IF
  201.     ELSEIF ERR = STFQUIT THEN
  202.         dlg% = EXITQUIT
  203.     ELSE
  204.         dlg% = EXITFAILURE
  205.     END IF
  206. QUITL1:
  207.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  208.     IF sz$ = "REACTIVATE" THEN
  209.         GOTO QUITL1
  210.     END IF
  211.     UIPop 1
  212.  
  213.     END
  214.  
  215. ERRQUIT:
  216.     i% = DoMsgBox("Installation failure.  Call " + COMPANY$ + " Technical Support", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  217.     END
  218.  
  219.  
  220.  
  221. BADPATH:
  222.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  223.     IF sz$ = "REACTIVATE" THEN
  224.         GOTO BADPATH
  225.     END IF
  226.     UIPop 1
  227.     RETURN
  228.  
  229.  
  230.  
  231. ASKQUIT:
  232.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  233.  
  234.     IF sz$ = "EXIT" THEN
  235.         UIPopAll
  236.         ERROR STFQUIT
  237.     ELSEIF sz$ = "REACTIVATE" THEN
  238.         GOTO ASKQUIT
  239.     ELSE
  240.         UIPop 1
  241.     END IF
  242.     RETURN
  243.  
  244.  
  245.  
  246. '**
  247. '** Purpose:
  248. '**     Builds the copy list and performs all installation operations.
  249. '** Arguments:
  250. '**     none.
  251. '** Returns:
  252. '**     none.
  253. '*************************************************************************
  254. INSTALL:
  255.  
  256.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  257.  
  258.     AddSectionFilesToCopyList "app", SrcDir$, DEST$
  259.     IF PROGNAME$ = "WINCAKE" THEN
  260.         AddSectionFilesToCopyList "pro", SrcDir$, DEST$
  261.     ELSEIF PROGNAME$ = "WCWDEMO" THEN
  262.         AddSectionFilesToCopyList "demo", SrcDir$, DEST$
  263.     END IF
  264.     AddSectionFilesToCopyList "system", SrcDir$, GetWindowsSysDir()
  265.  
  266.     StillNeed& = GetCopyListCost(EXTRACOSTS$, FILECOSTS$, STILLNEEDED$)
  267.     IF StillNeed& > 0 THEN
  268.         ClearCopyList
  269.         FOR ix% = 1 TO 26 STEP 1              ''find first drive that needs space
  270.             need1& = VAL(GetListItem(STILLNEEDED$, ix%))
  271.             IF need1& > 0 THEN
  272.                 GOTO FNDDRV
  273.             END IF
  274.         NEXT ix%
  275.         ix = ixAppDrive                       ''(shouldn't happen)
  276.         need1& = 0
  277.         StillNeed& = 1
  278. FNDDRV:
  279.         need$  = LTRIM$(STR$( (need1&+1023) / 1024 )) + "K bytes"
  280.         cost$  = LTRIM$(STR$( (VAL(GetListItem(FILECOSTS$, ix%))+1023) / 1024 )) + "K"
  281.         drive$ = CHR$(ix% - 1 + ASC("A")) + ":"
  282.         msg$ = "Sorry, "+PRODUCTNAME$+" needs "+need$+" more ("+cost$+" total) on drive "+drive$+".  Clear space or try a new path."
  283.         i% = DoMsgBox(msg$, "Setup Problem", MB_RETRYCANCEL+MB_TASKMODAL+MB_ICONHAND)
  284.         IF i% = IDCANCEL THEN
  285.             GOSUB ASKQUIT
  286.         END IF
  287.         RETURN          ''must RETURN out of GOSUB to pop stack, not just GOTO
  288.     END IF
  289.  
  290.     CreateDir DEST$, cmoNone
  291.  
  292.     OpenLogFile MakePath(DEST$, "LOGFILE.OUT"), 0
  293.     WriteToLogFile ""
  294.     WriteToLogFile "User chose as destination directory: '" + DEST$ + "'"
  295.     WriteToLogFile "May have had to create the directory: " + DEST$
  296.     WriteToLogFile ""
  297.  
  298.     CopyFilesInCopyList
  299.  
  300.     SetRegKeyValue PROGNAME$, PRODUCTNAME$
  301.     SetRegKeyValue PROGNAME$+"\shell\print", ""
  302.     SetRegKeyValue PROGNAME$+"\shell\open\command", MakePath(DEST$,PROGNAME$+".EXE") + " %1"
  303.     MaybeAssociate "wrk"
  304.     MaybeAssociate "mid"
  305.     MaybeAssociate "mff"
  306.  
  307.     ini$ = MakePath(DEST$, PROGNAME$+".INI")
  308.     drm$ = MakePath(DEST$, "DRM.INI")
  309.     IF DoesFileExist(ini$,femExists) = 0 THEN
  310. '       i% = DoMsgBox("Providing you with default "+PROGNAME$+".INI file.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONINFORMATION)
  311.         CopyFile drm$, ini$, cmoVital, 0
  312.     ELSE
  313.         sz$ = UIStartDlg(CUIDLL$, INI_NOT_OVERWRITTEN, "FInfoDlgProc", 0, "")
  314.         IF sz$ = "EXIT" THEN
  315.             GOSUB ASKQUIT
  316.         ELSE
  317.             UIPop 1
  318.         END IF
  319.     END IF
  320.  
  321.     patches$ = MakePath(DEST$, "PATCHES.INI")
  322.     pat$ = MakePath(DEST$, "PAT.INI")
  323.     IF DoesFileExist(patches$,femExists) = 0 THEN
  324. '       i% = DoMsgBox("Providing you with default PATCHES.INI file.", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONINFORMATION)
  325.         CopyFile pat$, patches$, cmoVital, 0
  326.     ELSE
  327.         sz$ = UIStartDlg(CUIDLL$, PATCHES_NOT_OVERWRITTEN, "FInfoDlgProc", 0, "")
  328.         IF sz$ = "EXIT" THEN
  329.             GOSUB ASKQUIT
  330.         ELSE
  331.             UIPop 1
  332.         END IF
  333.     END IF
  334.  
  335.     CreateProgmanGroup PROGMANGROUPNAME$, "", cmoNone
  336.     ShowProgmanGroup  PROGMANGROUPNAME$, 1, cmoNone
  337.     CreateProgmanItem PROGMANGROUPNAME$, PRODUCTNAME$, MakePath(DEST$,PROGNAME$+".EXE"), "", cmoOverwrite
  338.     CreateProgmanItem PROGMANGROUPNAME$, "README.WRI", "write.exe "+MakePath(DEST$,"readme.wri"), "", cmoOverwrite
  339.     WriteToLogFile ""
  340.  
  341.     WriteToLogFile "SUB Install completed."
  342.     CloseLogFile
  343.  
  344.     RETURN
  345.  
  346.  
  347.  
  348. '**
  349. '** Purpose:
  350. '**     Appends a file name to the end of a directory path,
  351. '**     inserting a backslash character as needed.
  352. '** Arguments:
  353. '**     szDir$  - full directory path (with optional ending "\")
  354. '**     szFile$ - filename to append to directory
  355. '** Returns:
  356. '**     Resulting fully qualified path name.
  357. '*************************************************************************
  358. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  359.     IF szDir$ = "" THEN
  360.         MakePath = szFile$
  361.     ELSEIF szFile$ = "" THEN
  362.         MakePath = szDir$
  363.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  364.         MakePath = szDir$ + szFile$
  365.     ELSE
  366.         MakePath = szDir$ + "\" + szFile$
  367.     END IF
  368. END FUNCTION
  369.  
  370.  
  371.  
  372. '**
  373. '** Purpose:
  374. '**     Associates given filetype with us, but asks for user confirmation
  375. '**     if already set to something else.
  376. '** Arguments:
  377. '**     szExt$ - filetype extension, e.g. "mid"
  378. '** Returns:
  379. '**     none.
  380. '*************************************************************************
  381. SUB MaybeAssociate (szExt$) STATIC
  382.     oldProg$ = ""
  383.     ok% = IDYES
  384.  
  385. 'Check Registration Database (overrides WIN.INI [Extensions]).
  386.  
  387.     oldCmd$ = UCASE$( LTRIM$( GetRegKeyValue("."+szExt$+"\shell\open\command") ) )
  388.     IF oldCmd$ = "" THEN    'didn't find direct association, check via prog name
  389.         oldProg$ = LTRIM$( RTRIM$( GetRegKeyValue("."+szExt$) ) )
  390.         IF oldProg$ <> "" THEN
  391.             oldCmd$ = UCASE$( LTRIM$( GetRegKeyValue(oldProg$+"\shell\open\command") ) )
  392.             oldProduct$ = LTRIM$( RTRIM$( GetRegKeyValue(oldProg$) ) )
  393.             IF oldProduct$ <> "" THEN    'long product name found, use it
  394.                 oldProg$ = oldProduct$
  395.             END IF
  396.         END IF
  397.     END IF
  398.     IF oldCmd$ <> "" THEN
  399.         IF INSTR(oldCmd$, PROGNAME$+".EXE") = 0 THEN    'not us, must confirm
  400.             IF oldProg$ = "" THEN   'no short or long name, parse command string
  401.                 j% = INSTR(oldCmd$, " ")
  402.                 IF j% > 1 THEN
  403.                     oldProg$ = MID$(oldCmd$, 1, j%-1)
  404.                 ELSE
  405.                     oldProg$ = oldCmd$
  406.                 END IF
  407.             END IF
  408.         ELSE                            'it's us, clear oldProg$ => no confirm
  409.             oldProg$ = ""
  410.         END IF
  411.         GOTO MAYBE_CONFIRM      'found association, no need to examine WIN.INI
  412.     END IF
  413.  
  414. 'Check WIN.INI [Extensions].
  415.  
  416.     oldCmd$ = UCASE$( LTRIM$( GetIniKeyString("WIN.INI","Extensions",szExt$) ) )
  417.     IF oldCmd$ <> "" THEN
  418.         IF INSTR(oldCmd$, PROGNAME$+".EXE") = 0 THEN    'not us, must confirm
  419.             j% = INSTR(oldCmd$, " ")
  420.             IF j% > 1 THEN
  421.                 oldProg$ = MID$(oldCmd$, 1, j%-1)
  422.             ELSE
  423.                 oldProg$ = oldCmd$
  424.             END IF
  425.         END IF
  426.     END IF
  427.  
  428. 'Get user confirmation if necessary, and do the association if ok.
  429.  
  430. MAYBE_CONFIRM:
  431.     IF oldProg$ <> "" THEN
  432.         ok% = DoMsgBox("."+UCASE$(szExt$)+" files are currently associated with "+oldProg$+".  Switch association to "+PRODUCTNAME$+"?", "Setup Question", MB_YESNO+MB_TASKMODAL+MB_ICONQUESTION)
  433.     END IF
  434.  
  435.     IF ok% = IDYES THEN
  436.         DeleteRegKey   "."+szExt$       'delete all keys for any old direct association
  437.         SetRegKeyValue "."+szExt$, PROGNAME$
  438.         CreateIniKeyValue "WIN.INI", "Extensions", szExt$, MakePath(DEST$,PROGNAME$+".EXE") + " ^." + szExt$, cmoOverwrite
  439.     END IF
  440.  
  441. END SUB
  442.